﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Iacym.BusinessLogic;
using Iacym.Entities;
using Microsoft.Practices.Unity;
using Microsoft.VisualBasic;

namespace Iacym.UI
{
    public partial class FrmOfrenda : Form
    {
        [Dependency]
        public ITipoMonedaBL tipomonedaBL { get; set; }
        [Dependency]
        public TipoOfrendaBL tipoofrendaBL { get; set; }
        [Dependency]
        public TipoPagoBL tipopagoBL { get; set; }
        [Dependency]
        public OfrendaBL ofrendaBL { get; set; }

        [Dependency]
        public ITipoReunionBL tipoRBL { get; set; }

        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }

        public FrmOfrenda()
        {
            InitializeComponent();
            this.BuildUp();
        }

        public USUARIO currentUsuarioOfrenda { get; set; }

        private void DeshabilitarCombos()
        {
            cbTipoMoneda.Enabled = false;
            cbTipoOfrenda.Enabled = false;
            cbTipoPago.Enabled = false;
            dtFechaEspecifica.Enabled = false;
            dtRangoFin.Enabled = false;
            dtRangoInicio.Enabled = false;
            chbAnulados.Checked = false;
            chbVigentes.Checked = false;
            chbTipoMoneda.Checked = false;
            chbTipoPago.Checked = false;
            chbTipoOfrenda.Checked = false;
        }

        //public void VerOfrendas(String _nombresPersona)
        //{
        //    TxtCriterio.Text = _nombresPersona.Replace(",", "");
        //    TxtCriterio.ReadOnly = true;
        //    var _ofrendas = ofrendaBL.GetFromOfrendasByPersona(_nombresPersona.Replace(",", ""));
        //    oFRENDABindingSource.DataSource = _ofrendas;
        //    BuscarOfrenda();
        //    oFRENDABindingSource.ResetBindings(true);
        //}

        public bool isPersona { get; set; }
        public string _nombrePersona { get; set; }

        private void FrmOfrenda_Load(object sender, EventArgs e)
        {
            if (currentUsuarioOfrenda != null)
            {
                menuLlena();
                CargarDatos();
                CalcularMontos();
                if (rbGeneral.Checked)
                {
                    gbEspecifico.Enabled = false;
                }
            }
            else if (rbGeneral.Checked)
            {
                gbEspecifico.Enabled = false;
                CargarDatos();
                CalcularMontos();
            }
        }

        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuarioOfrenda.PERSONA.Dni);

            var permisos = (from p in usuMenuBL.GetAllUsuarioMenu(datoUsuario.UsuarioId)
                            select p.MENU.Tag.ToString()).ToArray();

            System.Windows.Forms.Button[] botones = new System.Windows.Forms.Button[] { 
            this.BtnNuevo};

            var noVisible = from nv in botones
                            where !permisos.Contains(nv.Tag.ToString())
                            select nv;

            noVisible.ToList().ForEach(nv => nv.Enabled = false);

            if (rbGeneral.Checked)
            {
                gbEspecifico.Enabled = false;
                CargarDatos();
            }
        }

        private void CargarDatos()
        {
            if (isPersona)
            {
                TxtCriterio.Text = _nombrePersona.Replace(",", "");
                TxtCriterio.ReadOnly = true;
                oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendasByPersona(_nombrePersona.Replace(",", ""));
                CalcularMontos();
            }
            else
            {
                oFRENDABindingSource.DataSource = ofrendaBL.GetAllFromOfrendas();
                CalcularMontos();
            }
        }

        private void CalcularMontos()
        {
            Decimal montoSoles = 0;
            Decimal montoDolares = 0;
            Decimal montoEuros = 0;
            Decimal montoAnuladoSoles = 0;
            Decimal montoAnuladoDolares = 0;
            Decimal montoAnuladoEuros = 0;

            foreach (DataGridViewRow row in oFRENDADataGridView.Rows)
            {
                if (!Convert.ToBoolean(row.Cells[9].Value))
                {
                    if (row.Cells[6].Value.ToString().CompareTo("SOLES") == 0)
                        montoSoles += Convert.ToDecimal(row.Cells[4].Value.ToString());
                    else if (row.Cells[6].Value.ToString().CompareTo("DOLARES") == 0)
                        montoDolares += Convert.ToDecimal(row.Cells[4].Value.ToString());
                    else if (row.Cells[6].Value.ToString().CompareTo("EUROS") == 0)
                        montoEuros += Convert.ToDecimal(row.Cells[4].Value.ToString());
                }
                else
                {
                    if (row.Cells[6].Value.ToString().CompareTo("SOLES") == 0)
                        montoAnuladoSoles += Convert.ToDecimal(row.Cells[4].Value.ToString());
                    else if (row.Cells[6].Value.ToString().CompareTo("DOLARES") == 0)
                        montoAnuladoDolares += Convert.ToDecimal(row.Cells[4].Value.ToString());
                    else if (row.Cells[6].Value.ToString().CompareTo("EUROS") == 0)
                        montoAnuladoEuros += Convert.ToDecimal(row.Cells[4].Value.ToString());
                }
            }

            txtSoles.Text = montoSoles.ToString();
            txtDolares.Text = montoDolares.ToString();
            txtEuros.Text = montoEuros.ToString();
            textAnuladoSoles.Text = montoAnuladoSoles.ToString();
            textAnuladoDolares.Text = montoAnuladoDolares.ToString();
            textAnuladoEuros.Text = montoAnuladoDolares.ToString();
        }

        private void chbFechaEspecifica_Click(object sender, EventArgs e)
        {
            if (chbFechaEspecifica.Checked)
            {
                dtFechaEspecifica.Enabled = true;
                dtRangoFin.Enabled = false;
                dtRangoInicio.Enabled = false;
                chbRango.Checked = false;
            }
            else
            {
                dtFechaEspecifica.Enabled = false;
            }
        }

        private void chbRango_Click(object sender, EventArgs e)
        {
            if (chbRango.Checked)
            {
                dtRangoFin.Enabled = true;
                dtRangoInicio.Enabled = true;
                chbFechaEspecifica.Checked = false;
                dtFechaEspecifica.Enabled = false;
            }
            else
            {
                dtRangoInicio.Enabled = false;
                dtRangoFin.Enabled = false;
            }
        }

        #region Buscar Ofrenda
        private void BuscarOfrenda()
        {
            int opcion;

            if (rbGeneral.Checked)
            {
                oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendasByPersona(TxtCriterio.Text);
            }

            #region Ofrendas por tipo ofrenda y fechas + Persona
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }

                    var id = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaPersona(id, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Ofrenda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var id = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaPersonaFechaEspec(id, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Ofrenda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var id = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaPersonaRangoFechas(id, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("No existe Tipo Ofrenda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo ofrenda, tipo moneda y fechas + Persona
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoMonedaPersona(idTO, idTM, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaFechaEspec(idTO, idTM, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                        var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaRangoFechas(idTO, idTM, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo ofrenda, tipo pago y fechas + persona
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoPagoPersona(idTO, idTP, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoPagoPersonaFechaEspec(idTO, idTP, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                        var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoPagoPersonaRangoFechas(idTO, idTP, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo ofrenda, tipo pago, tipo monenda y fechas + persona
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersona(idTO, idTP, idTM, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(idTO, idTP, idTM, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos.." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                        var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                        var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(idTO, idTP, idTM, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos.." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo moneda, tipo pago, personas y fechas
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTiPoPagoTipoMonedaPersona(idTP, idTM, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTiPoPagoTipoMonedaPersonaFechaEspec(idTP, idTM, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos.." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                        var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTiPoPagoTipoMonedaPersonaRangoFechas(idTP, idTM, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos.." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo moneda y fechas + Persona
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var id = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoMonedaPersona(id, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Moneda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var id = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoMonedaPersonaFechaEspec(id, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Moneda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var id = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoMonedaPersonaRangoFechas(id, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("No existe Tipo Moneda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo pago y fechas + Persona
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var id = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoPagoPersona(id, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Moneda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var id = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoPagoPersonaFechaEspec(id, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Moneda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var id = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoPagoPersonaRangoFechas(id, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("No existe Tipo Moneda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo de reunion y fechas + Persona

            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }

                    var id = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionPersona(id, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Reunión registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var id = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionPersonaFechaEspec(id, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("No existe Tipo Reunión registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var id = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionPersonaRangoFechas(id, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("No existe Tipo Ofrenda registrada en la base de datos." + "\n" + "Por favor, registre una antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            #endregion

            #region Ofrendas por tipo de reunion, tipo ofrenda y fechas + Persona
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoOfrendaPersona(idTR, idTO, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoOfrendaPersonaFechaEspec(idTR, idTO, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                        var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoOfrendaPersonaRangoFechas(idTR, idTO, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo de reunion, tipo pago y fechas + Persona
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoPagoPersona(idTR, idTP, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoPagoPersonaFechaEspec(idTR, idTP, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                        var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoPagoPersonaRangoFechas(idTR, idTP, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo de reunion, tipo moneda y fechas + Persona
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoMonedaPersona(idTR, idTM, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoMonedaPersonaFechaEspec(idTR, idTM, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                        var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoMonedaPersonaRangoFechas(idTR, idTM, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta un dato." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Ofrendas por tipo de reunion, tipo ofrenda, tipo pago, tipo moneda y fechas + Personas
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersona(idTR, idTO, idTP, idTM, TxtCriterio.Text, opcion);
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                    var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                    var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                    var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(idTR, idTO, idTP, idTM, TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos.." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (rbEspecifico.Checked && chbTipoOfrenda.Checked && chbTipoMoneda.Checked && chbTipoPago.Checked && chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (cbTipoReunion.Text.CompareTo("No hay Tipo Reunion") != 0 && cbTipoOfrenda.Text.CompareTo("No hay Tipo Ofrenda") != 0 && cbTipoMoneda.Text.CompareTo("No hay Tipo Moneda") != 0 && cbTipoPago.Text.CompareTo("No hay Tipo Pago") != 0)
                {
                    if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                    {
                        if (chbVigentes.Checked)
                        {
                            opcion = 1;
                        }
                        else if (chbAnulados.Checked)
                        {
                            opcion = 2;
                        }
                        else
                        {
                            opcion = 0;
                        }
                        var idTO = Convert.ToInt32(cbTipoOfrenda.SelectedValue.ToString());
                        var idTM = Convert.ToInt32(cbTipoMoneda.SelectedValue.ToString());
                        var idTP = Convert.ToInt32(cbTipoPago.SelectedValue.ToString());
                        var idTR = Convert.ToInt32(cbTipoReunion.SelectedValue.ToString());
                        oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(idTR, idTO, idTP, idTM, TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                    }
                }
                else
                {
                    MessageBox.Show("Falta uno o más datos.." + "\n" + "Por favor, revise antes de continuar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion

            #region Busqueda de ofrendas solo por fechas
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                MessageBox.Show("Seleccione un criterio de búsqueda por favor.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && chbFechaEspecifica.Checked && !chbRango.Checked)
            {
                if (chbVigentes.Checked)
                {
                    opcion = 1;
                }
                else if (chbAnulados.Checked)
                {
                    opcion = 2;
                }
                else
                {
                    opcion = 0;
                }
                oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByPersonaFechaEspec(TxtCriterio.Text, dtFechaEspecifica.Value, opcion);
            }
            else if (rbEspecifico.Checked && !chbTipoOfrenda.Checked && !chbTipoMoneda.Checked && !chbTipoPago.Checked && !chbTipoReunion.Checked && !chbFechaEspecifica.Checked && chbRango.Checked)
            {
                if (dtRangoInicio.Value.Date <= dtRangoFin.Value.Date)
                {
                    if (chbVigentes.Checked)
                    {
                        opcion = 1;
                    }
                    else if (chbAnulados.Checked)
                    {
                        opcion = 2;
                    }
                    else
                    {
                        opcion = 0;
                    }
                    oFRENDABindingSource.DataSource = ofrendaBL.GetFromOfrendaByPersonaRangoFechas(TxtCriterio.Text, dtRangoInicio.Value, dtRangoFin.Value, opcion);
                }
            }
            #endregion
        }
        #endregion

        private void BtnBuscar_Click(object sender, EventArgs e)
        {
            BuscarOfrenda();
            CalcularMontos();
        }

        private void TxtCriterio_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void TxtCriterio_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarOfrenda();
                CalcularMontos();
            }
        }

        private void BtnNuevo_Click(object sender, EventArgs e)
        {
            FrmMttoOfrenda mttoOfrenda = new FrmMttoOfrenda();
            mttoOfrenda.Nuevo();
            mttoOfrenda.ShowDialog();
            CargarDatos();
            CalcularMontos();
        }

        #region Habilitar y Cargar Combos

        private void cbTipoOfrenda_Click(object sender, EventArgs e)
        {
            try
            {
                tIPOOFRENDABindingSource.DataSource = tipoofrendaBL.GetAllFromTipoOfrenda();
            }
            catch (Exception)
            {
                cbTipoOfrenda.Text = "No hay Tipo Ofrenda";
            }
        }

        private void cbTipoMoneda_Click(object sender, EventArgs e)
        {
            try
            {
                tIPOMONEDABindingSource.DataSource = tipomonedaBL.GetAllFromTipoMoneda();
            }
            catch (Exception)
            {

                cbTipoMoneda.Text = "No hay Tipo Moneda";
            }
        }

        private void cbTipoPago_Click(object sender, EventArgs e)
        {
            try
            {
                tIPOPAGOBindingSource.DataSource = tipopagoBL.GetAllFromTipoPago();
            }
            catch (Exception)
            {

                cbTipoPago.Text = "No hay Tipo Pago";
            }
        }

        private void rbGeneral_CheckedChanged(object sender, EventArgs e)
        {
            if (rbGeneral.Checked)
            {
                gbEspecifico.Enabled = false;
            }
            else if (rbEspecifico.Checked)
            {
                gbEspecifico.Enabled = true;
            }
        }

        private void chbTipoOfrenda_Click(object sender, EventArgs e)
        {
            if (chbTipoOfrenda.Checked)
            {
                cbTipoOfrenda.Enabled = true;
                try
                {
                    tIPOOFRENDABindingSource.DataSource = tipoofrendaBL.GetAllFromTipoOfrenda();
                }
                catch (Exception)
                {
                    cbTipoOfrenda.Text = "No hay Tipo Ofrenda";
                }
            }
            else
            {
                cbTipoOfrenda.Enabled = false;
            }

        }

        private void chbTipoMoneda_Click(object sender, EventArgs e)
        {
            if (chbTipoMoneda.Checked)
            {
                cbTipoMoneda.Enabled = true;
                try
                {
                    tIPOMONEDABindingSource.DataSource = tipomonedaBL.GetAllFromTipoMoneda();
                }
                catch (Exception)
                {

                    cbTipoMoneda.Text = "No hay Tipo Moneda";
                }
            }
            else
            {
                cbTipoMoneda.Enabled = false;
            }
        }

        private void chbTipoPago_Click(object sender, EventArgs e)
        {
            if (chbTipoPago.Checked)
            {
                cbTipoPago.Enabled = true;
                try
                {
                    tIPOPAGOBindingSource.DataSource = tipopagoBL.GetAllFromTipoPago();
                }
                catch (Exception)
                {

                    cbTipoPago.Text = "No hay Tipo Pago";
                }
            }
            else
            {
                cbTipoPago.Enabled = false;
            }

        }

        #endregion

        private void oFRENDADataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            OFRENDA currentofrenda = oFRENDABindingSource.Current as OFRENDA;

            if (currentofrenda != null)
            {
                if (this.oFRENDADataGridView.Columns[e.ColumnIndex].Name.Equals("btnAnular"))
                {

                    if (currentofrenda.Anulado == true)
                    {
                        MessageBox.Show("Esta ofrenda ya se encuentra anulada.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        FrmInputDialog input = new FrmInputDialog();
                        input.current = currentofrenda;
                        input.ShowDialog();
                        CargarDatos();
                        CalcularMontos();
                    }
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una ofrenda.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chbVigentes_Click(object sender, EventArgs e)
        {
            if (chbVigentes.Checked)
            {
                chbAnulados.Enabled = false;
            }
            else
            {
                chbAnulados.Enabled = true;
            }
        }

        private void chbAnulados_Click(object sender, EventArgs e)
        {
            if (chbAnulados.Checked)
            {
                chbVigentes.Enabled = false;
            }
            else
            {
                chbVigentes.Enabled = true;
            }
        }

        private void rbGeneral_Click(object sender, EventArgs e)
        {
            if (rbGeneral.Checked)
            {
                DeshabilitarCombos();
                gbEspecifico.Enabled = false;
                CargarDatos();
                CalcularMontos();
            }
        }

        private void dtRangoInicio_ValueChanged(object sender, EventArgs e)
        {
            if (dtRangoInicio.Value.Date > dtRangoFin.Value.Date)
            {
                MessageBox.Show("La fecha inicio no puede ser mayor a la fecha fin.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                dtRangoInicio.ResetText();
            }
        }

        private void dtRangoFin_ValueChanged(object sender, EventArgs e)
        {
            if (dtRangoFin.Value.Date < dtRangoInicio.Value.Date)
            {
                MessageBox.Show("La fecha fin no puede ser menor a la fecha inicio.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                dtRangoFin.ResetText();
            }
        }

        private void chbTipoReunion_Click(object sender, EventArgs e)
        {
            if (chbTipoReunion.Checked)
            {
                cbTipoReunion.Enabled = true;
                try
                {
                    tIPOREUNIONBindingSource.DataSource = tipoRBL.GetAllFromTipoReunion();
                }
                catch (Exception)
                {

                    cbTipoPago.Text = "No hay Tipo Reunión";
                }
            }
            else
            {
                cbTipoReunion.Enabled = false;
            }
        }

        private void btnDonacionMiembro_Click(object sender, EventArgs e)
        {
            var _current = oFRENDABindingSource.Current as OFRENDA;
            if (_current != null)
            {
                var frm = new Reportes.frmDonacionMiembro();
                frm.IdPersona = _current.PersonaId;
                frm.ShowDialog();
            }
            else MessageBox.Show("Debe seleccionar una Ofrenda", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnDonacionTotal_Click(object sender, EventArgs e)
        {
            var frm = new Reportes.frmOfrendaTotal();
            frm.ShowDialog();
        }
    }
}
